<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js"></script>
    <style>

    </style>
</head>

<body>
    <div id="app">
        <!-- v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。 -->
        <h1 v-if="awesome">Vue is awesome!</h1>
        <!-- v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面，否则它将不会被识别。 -->
        <h1 v-else>Oh no</h1>

        <!-- v-else-if，顾名思义，充当 v-if 的“else-if 块”，可以连续使用： -->
        <div v-if="type === 'A'">
            A
        </div>
        <div v-else-if="type === 'B'">
            B
        </div>
        <div v-else-if="type === 'C'">
            C
        </div>
        <div v-else>
            Not A/B/C
        </div>

        <!-- 如果想切换多个元素呢？可以把一个 <template> 元素当做不可见的包裹元素，并在上面使用 v-if。包裹想要切换的多个元素。（最终的渲染结果将不包含 <template> 元素） -->
        <template v-if="ok">
            <h1>Title</h1>
            <p>Paragraph 1</p>
            <p>Paragraph 2</p>
        </template>

        <!-- 用 key 管理可复用的元素 -->
        <!-- Vue 会尽可能高效地渲染元素，通常会复用已有元素而不是从头开始渲染。 -->
        <!-- 如：用户在不同的登录方式之间切换：将不会清除用户已经输入的内容。因为两个模板使用了相同的元素 -->
        <template v-if="loginType === 'username'">
            <label>Username</label>
            <input placeholder="Enter your username">
        </template>
        <template v-else>
            <label>Email</label>
            <input placeholder="Enter your email address">
        </template>
        <!-- 但是：这两个input元素是完全独立的，不要复用它们。只需添加一个具有唯一值的 key attribute 即可： -->
        <template v-if="loginType === 'username'">
            <!-- <label> 元素仍然会被高效地复用，因为它们没有添加 key attribute。 -->
            <label>Username</label>
            <input placeholder="Enter your username" key="username-input">
        </template>
        <template v-else>
            <label>Email</label>
            <input placeholder="Enter your email address" key="email-input">
        </template>
        <button @click="loginType = (loginType === 'username') ? 'username' : 'other'">切换方式</button>
    </div>

    <!-- v-show -->
    <!-- 不同的是带有 v-show 的元素始终会被渲染并保留在 DOM 中。
        v-show 只是简单地切换元素的 CSS property display。 -->
    <h1 v-show="ok">Hello!</h1>

    <!-- ----------------------------- -->
    <!-- v-if vs v-show -->
    <!-- v-if 是“真正”的条件渲染。
         v-show 就简单得多——不管初始条件是什么，元素总是会被渲染，并且只是简单地基于 CSS 进行切换。-->
    <!-- 一般来说，v-if 有更高的切换开销，而 v-show 有更高的初始渲染开销。
        如果需要非常频繁地切换，则使用 v-show 较好；
        如果在运行时条件很少改变，则使用 v-if 较好。 -->

    <!-- ------------------------------- -->
    <!-- 不推荐同时使用 v-if 和 v-for，具体原因请查看列表渲染 v-for -->
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                awesome: true,
                ok: true,
                type: 'C',
                loginType: 'username',
            }
        })
    </script>
</body>

</html>